package com.joker.demo.admin.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 执行器统计VO
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:00
 */
@Data
public class ExecutorStatisticsVO implements Serializable {

    /**
     * 查询日期
     */
    private String queryDate;

    /**
     * 总体统计信息
     */
    private OverallStatistics overallStatistics;

    /**
     * 执行器状态统计
     */
    private ExecutorStatusStatistics executorStatusStatistics;

    /**
     * 任务执行统计
     */
    private TaskExecutionStatistics taskExecutionStatistics;

    /**
     * 执行器基本信息列表（简化版，避免套娃）
     */
    private List<ExecutorBasicInfo> executorBasicInfos;

    /**
     * 小时统计信息
     */
    private List<HourlyStatisticsVO> hourlyStatistics;

    /**
     * 应用统计信息
     */
    private List<AppStatisticsVO> appStatistics;

    /**
     * 执行器基本信息（简化版，避免套娃）
     */
    @Data
    public static class ExecutorBasicInfo implements Serializable {
        /**
         * 执行器标识
         */
        private String registerKey;

        /**
         * 应用名称
         */
        private String appName;

        /**
         * 监控时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime monitorTime;

        /**
         * 执行器状态
         */
        private String status;

        /**
         * 健康状态
         */
        private String healthStatus;

        /**
         * 核心线程池大小
         */
        private Integer corePoolSize;

        /**
         * 最大线程池大小
         */
        private Integer maximumPoolSize;

        /**
         * 当前线程池大小
         */
        private Integer poolSize;

        /**
         * 活跃线程数
         */
        private Integer activeCount;

        /**
         * 队列大小
         */
        private Integer queueSize;

        /**
         * 队列剩余容量
         */
        private Integer queueRemainingCapacity;

        /**
         * 已完成任务数
         */
        private Long completedTaskCount;

        /**
         * 总任务数
         */
        private Long taskCount;

        /**
         * 运行中任务数
         */
        private Integer runningTaskCount;

        /**
         * 延迟任务数
         */
        private Integer delayTaskCount;

        /**
         * 最近一分钟完成任务数
         */
        private Long completedTasksLastMinute;

        /**
         * 最近一分钟失败任务数
         */
        private Long failedTasksLastMinute;

        /**
         * 平均任务执行时间(毫秒)
         */
        private BigDecimal averageTaskExecutionTimeMs;

        /**
         * 内存使用率
         */
        private BigDecimal memoryUsagePercent;

        /**
         * 已使用内存(MB)
         */
        private Long usedMemoryMb;

        /**
         * 最大内存(MB)
         */
        private Long maxMemoryMb;

        /**
         * 最后心跳时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime lastHeartbeatTime;
    }
}


